package j20251115;

import java.io.File;
import java.io.IOException;

public class Demo3 {
    public static void main(String[] args) {
        // 创建和删除操作
        File file = new File("temp_file.txt");
        File newFile = new File("renamed_file.txt");
        File dir = new File("temp_dir");

        try {
            System.out.println("=== 创建操作 ===");
            System.out.println("创建文件: " + file.createNewFile());
            System.out.println("创建目录: " + dir.mkdir());

            System.out.println("\n=== 重命名操作 ===");
            System.out.println("重命名文件: " + file.renameTo(newFile));

            System.out.println("\n=== 删除操作 ===");
            System.out.println("删除文件: " + newFile.delete());
            System.out.println("删除目录: " + dir.delete());

        } catch (IOException e) {
            e.printStackTrace();
        }

        // 目录操作示例
        directoryOperations();
    }

    public static void directoryOperations() {
        File projectsDir = new File("projects");
        File srcDir = new File(projectsDir, "src");
        File binDir = new File(projectsDir, "bin");

        try {
            System.out.println("\n=== 目录操作 ===");
            // 创建单个目录
            System.out.println("创建projects目录: " + projectsDir.mkdir());

            // 创建多级目录
            System.out.println("创建src目录: " + srcDir.mkdirs());
            System.out.println("创建bin目录: " + binDir.mkdir());

            // 在src目录中创建几个文件
            new File(srcDir, "Main.java").createNewFile();
            new File(srcDir, "Utils.java").createNewFile();

            // 列出目录内容
            System.out.println("\nprojects目录内容:");
            String[] contents = projectsDir.list();
            if (contents != null) {
                for (String item : contents) {
                    System.out.println("  " + item);
                }
            }

            // 使用文件名过滤器
            System.out.println("\nJava文件:");
            String[] javaFiles = srcDir.list((dir, name) -> name.endsWith(".java"));
            if (javaFiles != null) {
                for (String javaFile : javaFiles) {
                    System.out.println("  " + javaFile);
                }
            }

            // 获取文件对象数组
            System.out.println("\n文件对象列表:");
            File[] files = srcDir.listFiles();
            if (files != null) {
                for (File f : files) {
                    System.out.println("  " + f.getName() +
                            " (目录: " + f.isDirectory() + ")");
                }
            }

            // 获取根目录
            System.out.println("\n根目录:");
            File[] roots = File.listRoots();
            for (File root : roots) {
                System.out.println("  " + root.getPath());
            }

            // 清理
            deleteDirectory(projectsDir);

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    // 递归删除目录
    public static void deleteDirectory(File dir) {
        if (dir.isDirectory()) {
            File[] files = dir.listFiles();
            if (files != null) {
                for (File file : files) {
                    deleteDirectory(file);
                }
            }
        }
        dir.delete();
        System.out.println("已删除: " + dir.getPath());
    }
}
